// 这部分代码导入了 Cocos 引擎中的几个基础组件，
// 包括装饰器 _decorator、基础类 Component、精灵 Sprite、精灵帧 SpriteFrame
// 和用户界面变换 UITransform。
import { _decorator, Component, Sprite, SpriteFrame, UITransform } from 'cc'
import { TILE_TYPE_ENUM } from '../Enums'
const { ccclass } = _decorator
// 定义了瓷砖的宽度和高度常量，均为 55 像素。
// 这为稍后设置瓷砖的大小提供了基础。
export const TILE_WIDTH = 55
export const TILE_HEIGHT = 55

@ccclass('TileManager')
export class TileManager extends Component {
  type: TILE_TYPE_ENUM
  moveable: boolean
  turnable: boolean

  // 定义了一个异步的 init 方法，接受三个参数：
  // 一个 SpriteFrame 对象和两个数字 i、j，它们通常用于指定瓷砖的网格位置。
  async init(type: TILE_TYPE_ENUM, spriteFrame: SpriteFrame, i: number, j: number) {
    this.type = type
    if (
      this.type === TILE_TYPE_ENUM.WALL_COLUMN ||
      this.type === TILE_TYPE_ENUM.WALL_ROW ||
      this.type === TILE_TYPE_ENUM.WALL_LEFT_BOTTOM ||
      this.type === TILE_TYPE_ENUM.WALL_LEFT_TOP ||
      this.type === TILE_TYPE_ENUM.WALL_RIGHT_BOTTOM ||
      this.type === TILE_TYPE_ENUM.WALL_RIGHT_TOP
    ) {
      this.moveable = false
      this.turnable = false
    } else if(
      this.type === TILE_TYPE_ENUM.CLIFF_CENTER ||
      this.type === TILE_TYPE_ENUM.CLIFF_LEFT ||
      this.type === TILE_TYPE_ENUM.CLIFF_RIGHT
    ){
      this.moveable = false
      this.turnable = true
    } else if(
      this.type === TILE_TYPE_ENUM.FLOOR
    ){
      this.moveable = true
      this.turnable = true
    }
    // this.addComponent(Sprite)：为当前节点添加一个 Sprite 组件。
    const sprite = this.addComponent(Sprite)
    //将传入的精灵帧设置为该精灵的图像。
    sprite.spriteFrame = spriteFrame
    // this.getComponent(UITransform)：获取当前节点的 UITransform 组件。
    const transForm = this.getComponent(UITransform)
    // 将组件的尺寸设置为先前定义的瓷砖大小（55x55 像素）。
    transForm.setContentSize(TILE_WIDTH, TILE_HEIGHT)
    // 根据传入的 i 和 j 值计算并设置节点的位置，实现瓷砖在二维网格中的放置。
    this.node.setPosition(i * TILE_WIDTH, -j * TILE_HEIGHT)
  }
}
